package IU;

import Controladores.AnalizarContrato;
import Controladores.CtrlAMBOperario;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

import utiles.Validador;

import Entidades.Proveedor;
import Entidades.Producto;
import Entidades.Detallerecepcion;
import Entidades.Operario;
import Entidades.Transporte;
import Entidades.Transportista;
import Entidades.Pesajeentrada;
import Entidades.Pesajesalida;

import Controladores.CtrlEstadoespera;
import Controladores.CtrlEstadotransporte;
import Controladores.CtrlPesajeentrada;
import Controladores.CtrlTransporte;
import Controladores.CtrlPesajesalida;
import Controladores.CtrlStockproducto;
import Controladores.CtrlDetallerecepcion;

import Entidades.Estadoespera;
import Entidades.Stockproducto;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Vector;

/**
 *
 * 
 * @author  Laura
 *  Detallerecepcion_1 detallerecepcion este lo trae de PesajeEntradaPendientes
 * Proveedor proveedor, Transporte transporte, Transportista transportista, Producto producto : no sé si me trae los objetos completos
 * o solo algún atributo de estos, supongo que lso trae completos, pero si no es así decime que atributos trae así
 * los busco yo con los controladores y me traigo los objeto como los necesito.
 *
 *
 *   con el pesaje de entrada...:
 *cuando creamos la recepcion podemos tener más de un detalle,
 * donde cada detalle hace referencia a un producto, entonces el camión trae malbec
 * y en el acoplado trae cabernet. Cuando hacemos el pesaje: peso entrada pendiente hace
 * referencia a cada uon detalle de recepcion

 */
public class PesajeManualSalida2 extends javax.swing.JFrame {

    Validador validador;
    CtrlPesajesalida ctrlpesajesalida;
    CtrlEstadoespera ctrlestadoespera;
    CtrlEstadotransporte ctrlestadotransporte;
    CtrlTransporte ctrltransporte;
    CtrlPesajeentrada ctrlpesajeentrada;
    CtrlStockproducto ctrlstockproducto;
    CtrlDetallerecepcion ctrldetallerecepcion;
    CtrlAMBOperario ctrloperario;
    Date fechaHoraPesajeEntrada;
    Date fechaHoraPesajeSalida;
    String a, b;
    String nombre;
    String usuario;
    Operario o;
    Detallerecepcion detallerecepcion;
    Transporte transporte;
    Estadoespera estadoespera;
    List<Detallerecepcion> listadetrecepcion = new ArrayList<Detallerecepcion>();
    Proveedor proveedor;
    Transportista transportista;
    Producto producto;
    String pat;
    String operarios;
    int idRol;
    float pesoTaraCamion;
    float tara = 0;
    float pesoNeto = 0;
    int idPesada;
    int pesoAutomaticoSalida = 0; //no debería modificarse este valor ya que el pesaje es manual por lo tanto automatico es 0;
    Pesajeentrada pesajeEntrada;
    Stockproducto stock;
    List<Pesajeentrada> lpesajeEntrada = new ArrayList<Pesajeentrada>();
    Collection<Stockproducto> listasprod = new ArrayList<Stockproducto>();
    Pesajeentrada pen;
    Pesajesalida p = new Pesajesalida();
    BuscarPesajeSalida bps;
    private float cantidad;
//     private PesajeManualSalida2 PesajeManualSalida2(Proveedor proveedor, Transporte transporte, Producto producto, Transportista transportista, List<Detallerecepcion_1> listadetrecepcion) {
//        throw new UnsupportedOperationException("Not yet implemented");
//    }

    public PesajeManualSalida2(Proveedor prov, Transporte transport, Transportista transportist, List<Detallerecepcion> listadetallesrecep, Producto product, String operario) {
        initComponents();
        String operarios = operario;
        jTextFieldUsuario2.setText(operarios);
        System.getProperty("CtrlPesajesalida2.classpath");
        proveedor = prov;
        transportista = transportist;
        transporte = transport;
        producto = product;
        System.out.println("antes de la lista");
        listadetrecepcion = listadetallesrecep;

        ctrlpesajesalida = new CtrlPesajesalida();
        ctrlestadoespera = new CtrlEstadoespera();
        ctrlestadotransporte = new CtrlEstadotransporte();
        ctrltransporte = new CtrlTransporte();
        ctrlpesajeentrada = new CtrlPesajeentrada();
        ctrlstockproducto = new CtrlStockproducto();
        ctrldetallerecepcion = new CtrlDetallerecepcion();
        ctrloperario = new CtrlAMBOperario();
        try {
            Operario o = ctrloperario.buscarOperarioApellido(operarios);
        } catch (Exception ex) {
            Logger.getLogger(PesajeManualSalida2.class.getName()).log(Level.SEVERE, null, ex);
        }

        Date fechaP = new Date();
        fechaP.getTime();
        fecha.setText(fechaP.toString());
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        btnRegistrarPesoManual = new javax.swing.JButton();
        jPanel3 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jTextFielPesoTaraCamion = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        jTextFieldUsuario2 = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        fecha = new javax.swing.JTextField();
        jButtonSalir = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Pesaje Manual de Salida - Sistema Gestor de Pesaje para Bodegas");

        jTabbedPane1.setForeground(new java.awt.Color(102, 0, 102));
        jTabbedPane1.setFont(new java.awt.Font("Segoe UI", 3, 12)); // NOI18N

        btnRegistrarPesoManual.setFont(new java.awt.Font("Segoe UI", 3, 12)); // NOI18N
        btnRegistrarPesoManual.setForeground(new java.awt.Color(102, 0, 102));
        btnRegistrarPesoManual.setText("Registrar");
        btnRegistrarPesoManual.setName("pesajeManualEntrada2"); // NOI18N
        btnRegistrarPesoManual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRegistrarPesoManualActionPerformed(evt);
            }
        });

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED), "Peso Tara ", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 3, 12), new java.awt.Color(102, 0, 102))); // NOI18N
        jPanel3.setFont(new java.awt.Font("Segoe UI", 1, 11)); // NOI18N

        jLabel2.setFont(new java.awt.Font("Segoe UI", 1, 11)); // NOI18N
        jLabel2.setText("Peso del Camión:");

        jTextFielPesoTaraCamion.setFont(new java.awt.Font("Neuropol", 1, 48)); // NOI18N
        jTextFielPesoTaraCamion.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
        jTextFielPesoTaraCamion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFielPesoTaraCamionActionPerformed(evt);
            }
        });

        jLabel8.setFont(new java.awt.Font("Segoe UI", 1, 11)); // NOI18N
        jLabel8.setText("Kgs.");

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGap(32, 32, 32)
                .addComponent(jLabel2)
                .addGap(18, 18, 18)
                .addComponent(jTextFielPesoTaraCamion, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(65, 65, 65))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addGap(43, 43, 43)
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextFielPesoTaraCamion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel8))
                .addContainerGap(57, Short.MAX_VALUE))
        );

        jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED), "Usuario Registrado", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 3, 12), new java.awt.Color(102, 0, 102))); // NOI18N

        jTextFieldUsuario2.setEditable(false);
        jTextFieldUsuario2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                .addContainerGap(24, Short.MAX_VALUE)
                .addComponent(jTextFieldUsuario2, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTextFieldUsuario2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(28, Short.MAX_VALUE))
        );

        jLabel3.setFont(new java.awt.Font("Segoe UI", 1, 11));
        jLabel3.setText("Fecha:");

        fecha.setEditable(false);
        fecha.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(133, 133, 133)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(171, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(604, Short.MAX_VALUE)
                .addComponent(btnRegistrarPesoManual)
                .addGap(71, 71, 71))
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(71, 71, 71)
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(106, 106, 106)
                .addComponent(jLabel3)
                .addGap(37, 37, 37)
                .addComponent(fecha, javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)
                .addGap(129, 129, 129))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(22, 22, 22)
                        .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(27, 27, 27))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addContainerGap(59, Short.MAX_VALUE)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(fecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel3))
                        .addGap(57, 57, 57)))
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnRegistrarPesoManual)
                .addContainerGap(27, Short.MAX_VALUE))
        );

        jTabbedPane1.addTab("Pesaje Manual Salida", jPanel1);

        jButtonSalir.setFont(new java.awt.Font("Segoe UI", 3, 12)); // NOI18N
        jButtonSalir.setForeground(new java.awt.Color(102, 0, 102));
        jButtonSalir.setText("Salir");
        jButtonSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSalirActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jButtonSalir)
                    .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 765, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(97, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 415, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jButtonSalir)
                .addContainerGap(132, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-888)/2, (screenSize.height-628)/2, 888, 628);
    }// </editor-fold>//GEN-END:initComponents

    private void refresh() {
//        jTextFieldcuartel.setText("");
//        jTextFieldCantidadAlta.setText("");
    }

private void jButtonSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSalirActionPerformed
    bps = new BuscarPesajeSalida(operarios);
    bps.setVisible(true);
    dispose();
}//GEN-LAST:event_jButtonSalirActionPerformed

private void jTextFielPesoTaraCamionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextFielPesoTaraCamionActionPerformed
    // TODO add your handling code here:
}//GEN-LAST:event_jTextFielPesoTaraCamionActionPerformed

private void btnRegistrarPesoManualActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegistrarPesoManualActionPerformed
    try {
        String peso = jTextFielPesoTaraCamion.getText();
        pesoTaraCamion = Float.parseFloat(peso);
        float taraEmpaques = 0;
        Pesajesalida p = new Pesajesalida();
        float taratotalempaques = 0;
        float capacidadEmpaques = 0;
        Detallerecepcion dtr = ctrldetallerecepcion.buscarDetallerecepcion_X_idDetallerecepcion(listadetrecepcion.get(0).getIdDetalleRecepcion());
        float pesobruto = dtr.getPesajeentrada().getPesobruto();
//            o = ctrloperario.buscarOperarioApellido(operarios);
        if (validar(pesoTaraCamion, pesobruto)) {
            obtenerFechaHoraActual();
            if (listadetrecepcion.size() >= 1) {
                for (int d = 0; d < listadetrecepcion.size(); d++) {
                    // va a crear un pesaje por cada detalle de recepcion que tengo
                    //TARA DE LOS EMPAQUES
                    detallerecepcion = listadetrecepcion.get(d);
                    taraEmpaques = calcularTaraEmpaquesPorDetalleRecepcion(detallerecepcion); //peso del empaque por cantida de empaques
                    taratotalempaques = taratotalempaques + taraEmpaques;
                    System.out.println("taratotalempaques " + taratotalempaques);
                }
                //capacidad de los empaques
                //              for (int d = 0; d < listadetrecepcion.size(); d++) {
                //                   capacidadEmpaques= calcularCapacidadEmpaquesPorDetalleRecepcion(detallerecepcion);
                //            }
                //capacidad de los empaques
                //              for (int d = 0; d < listadetrecepcion.size(); d++) {
                //                   capacidadEmpaques= calcularCapacidadEmpaquesPorDetalleRecepcion(detallerecepcion);
                //            }
                float pesoBrut = detallerecepcion.getPesajeentrada().getPesobruto();
                float taraTotalDetallesrecepcion = taratotalempaques + detallerecepcion.getRecepcion().getTransporte().getTaraTransporte();
                //
                System.out.println("pesoBruto " + pesoBrut);
                pesoNeto = (pesoBrut - taraTotalDetallesrecepcion);
                System.out.println("pesoNeto " + pesoNeto);
                //acá dividir
                for (int d = 0; d < listadetrecepcion.size(); d++) {
                    detallerecepcion = listadetrecepcion.get(d);
                    int nb = detallerecepcion.getNumeroBines(); //cantidad de empaques
                    double ce = detallerecepcion.getEmpaque().getCapacidadEmpaque(); //la capacidad debe ser en kilos para poder calcular
                    float capacidad = (float) (nb * ce);
                    System.out.println("capacidad empaque * cantidad empaques " + capacidad);
                    System.out.println(detallerecepcion.getEmpaque().getNombreEmpaque());
                    //GUARDAR PESAJESALIDA;
                    p.setFechahorapesajesalida(fechaHoraPesajeSalida.toString());
                    p.setOperario(o);
                    p.setPesajeautomaticosalida(pesoAutomaticoSalida);
                    p.setTara(pesoTaraCamion);
                    p.setPesoneto(pesoNeto);
                    try {
                        ctrlpesajesalida.guardarPesajesalida(p);
                        AnalizarContrato aContrato = new AnalizarContrato();
                        cantidad = aContrato.calcularCantidadPendiente(detallerecepcion);
                        System.out.println("Contrato Actualizado");
                        JOptionPane.showMessageDialog(this, "Pesaje de Salida registrado", "PesajeSalida", JOptionPane.INFORMATION_MESSAGE);
                    } catch (Exception e) {
                        System.out.println("Error en registro " + e);
                    }
                    try {
                        estadoespera = ctrlestadoespera.buscarEstadoesperaNombre("Finalizado"); //a pesosalidapendiente o descarga de lagar
                        System.out.println("estadoespera: " + estadoespera);
                    } catch (Exception e) {
                        System.out.println("no encontró el estado Finalizado " + e);
                    }
                    detallerecepcion.setPesajesalida(p);
                    detallerecepcion.setEstadoespera(estadoespera);
                    try {
                        ctrldetallerecepcion.modificarDetallerecepcion(detallerecepcion);
                        actualizarStock(detallerecepcion, pesoNeto);
                        JOptionPane.showMessageDialog(this, "Contrato Actualizado", "PesajeSalida", JOptionPane.INFORMATION_MESSAGE);
                    } catch (Exception e) {
                        System.out.println("Error en actualizacion del contrato  " + e);
                    }

                    System.out.println("Stock actualizado ");
                }
                //CUANDO VIENE UN SOLO DETALLE DE RECEPCION:
                //CUANDO VIENE UN SOLO DETALLE DE RECEPCION:
            } else {
                detallerecepcion = listadetrecepcion.get(0);
                //                int idre = detallerecepcion.getIdDetalleRecepcion();
                System.out.println("detallerecepcion else" + detallerecepcion.getIdDetalleRecepcion().toString());
                taraEmpaques = calcularTaraEmpaquesPorDetalleRecepcion(detallerecepcion);
                System.out.println("taraempaques " + taraEmpaques);
                float pesoBru = detallerecepcion.getPesajeentrada().getPesobruto();
                //System.out.println("taraempaques " + taraEmpaques);
                System.out.println("pesoBruto " + pesoBru);
                float taraTotalDetallerecepcion = taraEmpaques + detallerecepcion.getRecepcion().getTransporte().getTaraTransporte();
                System.out.println("totalTaraDetallerecepcion " + taraTotalDetallerecepcion);
                pesoNeto = (pesoBru - taraTotalDetallerecepcion);
                System.out.println("pesoNeto " + pesoNeto);
                //GUARDAR PESAJESALIDA;
                //   Pesajesalida p = new Pesajesalida();
                p.setFechahorapesajesalida(fechaHoraPesajeSalida.toString());
                p.setOperario(o);
                p.setPesajeautomaticosalida(pesoAutomaticoSalida);
                p.setTara(taraTotalDetallerecepcion);
                p.setPesoneto(pesoNeto);
                try {
                    ctrlpesajesalida.guardarPesajesalida(p);
                    AnalizarContrato aContrato = new AnalizarContrato();
                    cantidad = aContrato.calcularCantidadPendiente(detallerecepcion);
                    System.out.println("Contrato Actualizado");
                    JOptionPane.showMessageDialog(this, "Pesaje Registrado", "PesajeSalida", JOptionPane.INFORMATION_MESSAGE);
                } catch (Exception e) {
                    System.out.println("No puede guardar pesaje salida " + e);
                }
                try {
                    estadoespera = ctrlestadoespera.buscarEstadoesperaNombre("Finalizado"); //a pesosalidapendiente o descarga de lagar
                    System.out.println("estadoespera: " + estadoespera);
                } catch (Exception e) {
                    System.out.println("no encontró el estado Finalizado " + e);
                }
                detallerecepcion.setPesajesalida(p);
                detallerecepcion.setEstadoespera(estadoespera);
                System.out.println("estado setear al detalle linea 528:" + estadoespera);
                try {
                    ctrldetallerecepcion.modificarDetallerecepcion(detallerecepcion);
                    actualizarStock(detallerecepcion, pesoNeto);
                    JOptionPane.showMessageDialog(this, "Contrato Actualizado", "PesajeSalida", JOptionPane.INFORMATION_MESSAGE);
                } catch (Exception e) {
                    System.out.println("Error de actualización de contrato   " + e);
                }

                System.out.println("actualizó el stock ");
            }
        } //fin validar
        //    cambiarEstadoTransporteAFinalizado();
        //  System.out.println("cambió el estado del transporte a finalizado ");
        //cambiarDetalleAFinalizado();
    } catch (Exception ex) {
        Logger.getLogger(PesajeManualSalida2.class.getName()).log(Level.SEVERE, null, ex);
    }

//    cambiarEstadoTransporteAFinalizado();

    //  System.out.println("cambió el estado del transporte a finalizado ");
    //cambiarDetalleAFinalizado();
}//GEN-LAST:event_btnRegistrarPesoManualActionPerformed
    public boolean validar(float pt, float pb) {

        boolean ver = false;
        String tara = String.valueOf(pt);
        System.out.println(pb + " bruto en validar" + pt + "tara en validar");

        if (pt >= pb || pt == 0) {
            JOptionPane.showMessageDialog(this, "Error: verifique tara y bruto, debera registrar el pesaje manual", "Error", JOptionPane.ERROR_MESSAGE);

        } else {
            if (validador.getInstance().longitudminmax5(tara)) {
                JOptionPane.showMessageDialog(this, "Error: cantidad de digitos incorrectos", "Error", JOptionPane.ERROR_MESSAGE);

            } else if (!validador.getInstance().soloContieneNumerosYPuntos(tara)) {
                JOptionPane.showMessageDialog(this, "Peso Tara incorrecto, ingrese solo números", "Error", JOptionPane.ERROR_MESSAGE);


            } else {
                ver = true;




            }
        }
        return ver;




    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnRegistrarPesoManual;
    private javax.swing.JTextField fecha;
    private javax.swing.JButton jButtonSalir;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTextField jTextFielPesoTaraCamion;
    private javax.swing.JTextField jTextFieldUsuario2;
    // End of variables declaration//GEN-END:variables

    private boolean validar(String cantidad, String cuartel) {
        boolean ver = false;


        if (cantidad.equals("") || cuartel.equals("")) {
            JOptionPane.showMessageDialog(this, "Por favor ingrese la cantidad de producto!!!", "Error", JOptionPane.ERROR_MESSAGE);



        } else if (!validador.getInstance().soloContieneNumerosYPuntos(cantidad)) {
            JOptionPane.showMessageDialog(this, "Cantidad incorrecta: Ingrese solo números para cantidad del producto!!!", "Error", JOptionPane.ERROR_MESSAGE);



        } else if (!validador.getInstance().soloContieneNumeros(cuartel)) {
            JOptionPane.showMessageDialog(this, "Cuartel incorrecto: Ingrese solo números para cuartel!!!", "Error", JOptionPane.ERROR_MESSAGE);


        } else {
            ver = true;


        }
        return ver;


    }

    private Date obtenerFechaHoraActual() {
        java.util.Date utilDate = new java.util.Date(); //fecha actual


        long lnMilisegundos = utilDate.getTime();
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        String cadenaFecha = formato.format(utilDate);
        java.sql.Time sqlTime = new java.sql.Time(lnMilisegundos);

        a = String.valueOf(cadenaFecha);
        b = String.valueOf(sqlTime);
        //fecha.setText(a+" "+b);
        fechaHoraPesajeSalida = utilDate;
        System.out.println("fechaHoraPesajeSalida " + fechaHoraPesajeSalida);


        return fechaHoraPesajeSalida;


    }

    private void cambiarEstadoTransporteAFinalizado() {
        try {
            estadoespera = ctrlestadoespera.buscarEstadoesperaNombre("Finalizado");
            System.out.println("estadoespera: " + estadoespera);


        } catch (Exception e) {
            System.out.println("no encontró el estado finalizado " + e);


        }
        //transporte.setIdEstadoEspera(estadoespera);
        detallerecepcion.setEstadoespera(estadoespera);


        try {

            //  ctrltransporte.modificarTransporte(transporte);
            ctrldetallerecepcion.modificarDetallerecepcion(detallerecepcion);


        } catch (Exception e) {
            System.out.println("No pudo modificar transporte" + e);


        }
        // System.out.println("transporte " + transporte);
        System.out.println("detalle recepcion " + detallerecepcion);


    }

    private float calcularTaraEmpaquesPorDetalleRecepcion(Detallerecepcion detallerecepcion) {
        float pesoEmpaque = detallerecepcion.getEmpaque().getPesoEmpaque();
        System.out.println("pesoEmpaque " + pesoEmpaque);


        int cantidadEmpaques = detallerecepcion.getNumeroBines();
        System.out.println("cantidadEmpaques " + cantidadEmpaques);
        System.out.println(pesoEmpaque * cantidadEmpaques);


        return pesoEmpaque * cantidadEmpaques;


    }

    private float calcularCapacidadEmpaquesPorDetalleRecepcion(Detallerecepcion detallerecepcion) {
        double capacidadEmpaque = detallerecepcion.getEmpaque().getCapacidadEmpaque();
        System.out.println("pesoEmpaque " + capacidadEmpaque);

        int cantidadEmpaques = detallerecepcion.getNumeroBines();
        System.out.println("cantidadEmpaques " + cantidadEmpaques);
        System.out.println(capacidadEmpaque * cantidadEmpaques);

        return (float) capacidadEmpaque * cantidadEmpaques;
    }

    private void actualizarStock(Detallerecepcion detallerecepcion, float pesoneto) {
        //PARA ACTUALIZAR EL STOCK DEBO TENER EL TOTAL DEL PRODUCTO INGRESADO ES EL PESO NETO DEL PESAJESALIDA PARA ESE PRODUCTO
        producto = detallerecepcion.getProducto();



        int idproducto = producto.getIdProducto();



        try {
            listasprod = ctrlstockproducto.buscarStockproducto_X_idProducto(idproducto);
            System.out.println("stockproducto " + listasprod);


        } catch (Exception e) {
            System.out.println("no encontró stock por idproducto " + e);


        }
        if (!listasprod.isEmpty()) {
            for (Iterator it = listasprod.iterator(); it.hasNext();) {
                stock = (Stockproducto) it.next();


                double stockActual = stock.getCantidadStock();
                System.out.println("stock actual antes de  modificar" + stockActual);


                double stockModificado = stockActual + pesoneto;
                stock.setCantidadStock(stockModificado);

                System.out.println("stock modificado " + stockModificado);

                try {
                    ctrlstockproducto.modificarStockproducto(stock);

                    JOptionPane.showMessageDialog(this, "El Stock del producto" + producto.getNombreProducto() + "ha sido actualizado", "Pesaje Salida", JOptionPane.INFORMATION_MESSAGE);


                } catch (Exception e) {
                    System.out.println("no se puede actualizar el stock. " + e);


                }
            }
        } else if (listasprod.isEmpty()) {
            Stockproducto stockProductoNuevo = new Stockproducto();
            stockProductoNuevo.setProducto(producto);
            stockProductoNuevo.setDetallerecepcionCollection(listadetrecepcion);
            stockProductoNuevo.setFechaHoraStock(validador.getInstance().obtenerFechaSistema());
            stockProductoNuevo.setCantidadStock(pesoneto);
            ctrlstockproducto.guardarStockproducto(stockProductoNuevo);

        }
    }

    private float obtenerPesoBrutoCamion(Detallerecepcion detallerecepcion) {
        float pesoBruto = 0;
        Pesajeentrada pe = detallerecepcion.getPesajeentrada();
        System.out.println("Pesajeentrada pe = " + pe);


        try {
            pen = ctrlpesajeentrada.buscarPesajeentrada_X_idPesajeentrada(pe.getIdpesajeentrada());
            System.out.println("pesajeEntrada " + pen);


        } catch (Exception e) {
            System.out.println("no encontró pesaje entrada por iddetallerecepcion " + e);


        }
        pesoBruto = pen.getPesobruto();


        return pesoBruto;

    }

    private void cambiarDetalleAFinalizado() {
        try {
            estadoespera = ctrlestadoespera.buscarEstadoesperaNombre("Finalizado");
            detallerecepcion.setEstadoespera(estadoespera);
            ctrldetallerecepcion.modificarDetallerecepcion(detallerecepcion);
            System.out.println("estadoespera: " + estadoespera);


        } catch (Exception e) {
            System.out.println("no encontró el estado finalizado " + e);


        }







    }
}
